package com.gxc.array;

import java.util.*;

/**
 * 地上共有N个格子，你需要跳完地上所有的格子，但是格子间是有强依赖关系的，跳完前一个格子后，后续的格子才会被开启，格子间的依赖关系由多组steps数组给出，steps[0]表示前一个格子，steps[1]表示steps[0]可以开启的格子:比如[0,1]表示从跳完第0个格子以后第1个格子就开启了，比如[2,1]，[2,3]表示跳完第2个格子后第1个格子和第3个格子就被开启了。请你计算是否能由给出的steps数组跳完所有的格子，如果可以输出yes，否则输出no。说明：1.你可以从一个格子跳到任意一个开启的格子2.没有前置依赖条件的格子默认就是开启的3.如果总数是N，则所有的格子编号为[0,1,2,3…N-1]连续的数组
 *
 * 输入描述
 * 输入一个整数N表示总共有多少个格子，接着输入多组二维数组steps表示所有格子之间的依赖关系
 * 1 ≤ N ＜ 500 step[i].length = 2 0 ≤ step[i][0]，step[i][1] ＜ N
 * 输出描述
 * 如果能按照steps给定的依赖顺序跳完所有的格子输出yes，否则输出no。
 */
public class JumpingGrid {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.nextLine();

        Map<Integer, Integer> status = new HashMap<>();
        for (int i = 0; i < n; i++) {
            status.put(i, 1);
        }

        Queue<int[]> queue = new LinkedList<>();
        while (scanner.hasNextLine()) {
            String s = scanner.nextLine();
            if (s.equals("")) break;
            String[] split = s.split(" ");
            int x = Integer.parseInt(split[0]);
            int y = Integer.parseInt(split[1]);
            queue.add(new int[]{x, y});
            status.put(y, 0);
        }

        while (!queue.isEmpty()) {
            Queue<int[]> tmp = new LinkedList<>();
            boolean flag = false;
            while (!queue.isEmpty()) {
                int[] poll = queue.poll();
                int x = poll[0];
                int y = poll[1];
                if (status.get(x) == 1) {
                    flag = true;
                    status.put(y, 1);
                } else {
                    tmp.add(poll);
                }
            }
            queue = tmp;
            if (!flag) break;
        }

        for (Map.Entry<Integer, Integer> integerIntegerEntry : status.entrySet()) {
            if (integerIntegerEntry.getValue() == 0) {
                System.out.println("no");
                return;
            }
        }
        System.out.println("yes");
        scanner.close();
    }
}
